阅读更多

10顶
0踩

编程语言

原创新闻 Rails 2.0 Preview Release

2007-10-04 13:41 by 见习记者 hideto 评论(0) 有7778人浏览
原文: http://weblog.rubyonrails.org/2007/9/30/rails-2-0-0-preview-release

Action Pack: Resources
1,RESTful风格改进:
/people/1;edit将变成/people/1/edit

2,添加routing名字空间
map.namespace(:admin) do |admin|
  admin.resources :projects,
  :collection => { :inventory => :get },
  :member => { :duplicate => :post },
  :has_many => { :tags, :images, :variants }
end

这将生成类似inventory_admin_projects_url和admin_products_tags_url的命名routes

3,添加"rake routes"任务,将列出通过routes.rb生成的所有命名routes

4,一个新的convention:所有基于resource的controller都默认为复数形式,这样对不同context下的map都会对应到同一controller:
# /avatars/45 => AvatarsController#show
map.resources :avatars

# /people/5/avatar => AvatarsController#show
map.resources :people, :has_one => :avatar


Action Pack: Multiview
#respond_to得到进一步深入,对multiview使用形如action.format.renderer的模板名,如:
show.erb: 对所有formats使用同一模板
show.html.erb: html格式所使用的模板
index.atom.builder: 使用Builder渲染atom格式
edit.iphone.haml: 使用自定义HAML模板引擎对Mime::IPHONE格式渲染edit action

我们可以声明伪类型来为内部routing使用:
# should go in config/initializers/mime_types.rb
Mime.register_alias "text/html", :iphone

class ApplicationController < ActionController::Base
  before_filter :adjust_format_for_iphone

  private
    def adjust_format_for_iphone
      if request.env["HTTP_USR_AGENT"] && request.env["HTTP_USER_AGENT"][(iPhone|iPod)/]
        request.format = :iphone
    end
end

class PostsController < ApplicationController
  def index
    respond_to do |format|
      format.html # renders index.html.erb
      format.iphone # renders index.iphone.erb
    end
  end
end

我们可以在config/initializers/mime_types.rb文件里声明mime-type

Action Pack: Record identification
资源routes的使用简化
# person is a Person object, which by convention will
# be mapped to person_url for lookup
redirect_to(person)
link_to(person.name, person)
form_for(person)


Action Pack: HTTP Loving
1,HTTP Basic Authentication的简化使用:
class PostsController < ApplicationController
  USER_NAME, PASSWORD = "dhh", "secret"

  before_filter :authenticate, :except => [ :index ]

  def index
    render :text => "Everyone can see me!"
  end

  def edit
    render :text => "I'm only accessible if you know the password"
  end

  private
    def authenticate
      authenticate_or_request_with_http_basic do |user_name, password|
        user_name == USER_NAME && password == PASSWORD
      end
    end
end


2,JavaScript&stylesheet文件缓存
production模式下javascript_include_tag(:all, :cache => true)将把public/javascripts/*.js弄到public/javascripts/all.js里

3,设置ActionController::Base.asset_hot = "assets%d.example.com",则image_tag等asset calls会被自动分发到asset1~asset4

Action Pack: Security
1,预防CRSF攻击:
ActionController::Base.protect_from_forgery

2,预防XSS攻击:
TextHelper#sanitize

3,HTTP only cookies支持

Action Pack: Exception handling
1,rescue_action_in_public
class ApplicationController < ActionController::Base
  def rescue_action_in_public(exception)
    logger.error("rescue_action_in_public executed")
    case exception
    when ActiveRecord::RecordNotFound
      logger.error("404 displayed")
      render(:file => "#{RAILS_ROOT}/public/404.html", :status => "404 Not Found")
    # ...
  end
end


2,rescue_from
class PostsController < ApplicationController
  rescue_from User::NotAuthorized, :with => :deny_access

  protected
    def deny_access
      # ...
    end
end


Action Pack: Miscellaneous
1,AtomFeedHelper
# index.atom.builder:
atom_feed do |feed|
  feed.title("My great blog!")
  feed.updated(@posts.first.created_at)

  for post in @posts
    feed.entry(post) do |entry|
      entry.title(post.title)
      entry.content(post.body, :type => 'html')

      entry.author do |author|
        author.name("DHH")
      end
    end
  end
end


2,asset tag调用的性能提升和简单命名routes的缓存

3,将in_place_editor和autocomplete_for变成插件

Active Record: Performance
Query Cache,N+1查询的性能提升

Active Record: Sexy migrations
# old
create_table :people do |t|
  t.column,   "account_id",   :integer
  t.column,   "first_name",   :string,   :null => false
  t.column,   "last_name",    :string,   :null => false
  t.column,   "description",  :text
  t.column,   "created_at",   :datetime
  t.column,   "updated_at",   :datetime
end

# new
create_table :people do |t|
  t.integer    :account_id
  t.string     :first_name, :last_name, :null => false
  t.text       :description
  t.timestamps
end


Active Record: XML in JSON out
Person.new.from_xml("David")
person.to_json

Active Record: Shedding some weight
1,将acts_as_XYZ移到plugins

2,所有商业数据库adapters移到各自的gems里,Rails仅仅自带MySQL,SQLite和PostgreSQL的adapters
商业数据库adapters的gems命名规范为activerecord-XYZ-adapter,所以可以使用gem install activerecord-oracle-adapter来安装

Active Record: with_scope with a dash of syntactic vinegar
ActiveRecord::Base.with_scope成为protected以防止在controller里误用,因为它是设计来在Model里使用的

Action WebService out, ActiveResource in
在SOAP vs REST的战争里,Rails选择了REST,所以Action WebService被移出为一个gem,而引入的是著名的ActiveResource

ActiveSupport
添加Array#rand方法来从Array里随机得到一个元素
添加Hash#except方法来过滤不想要的keys
Date的一些扩展

Acion Mailer
一些bug fixes以及添加assert_emails测试方法

Rails: The debugger is back
gem install ruby-debug,然后在程序里某处使用"debugger",使用--debugger或-u来启动server即可

Rails: Clean up your environment
以前各种程序的配置细节都扔在config/environment.rb里,现在我们可以在config/initializers里建立不同的文件来配置不同的选项

Rails: Easier plugin order
以前plugins有依赖顺序时我们需要在config.plugins里列出来所有的plugins,现在可以这样config.plugins=[:acts_as_list, :all]

And hundreds uupon hundreds of other improvements
hundreds of bug fixes

So how do I upgrade?
首先升级到Rails 1.2.3,如果没有deprecation warnings,则可以升级到Rails 2.0
即将发布的Rails 1.2.4还会添加一些deprecation warnings

Thanks to everyone who’ve been involved with the development of Rails 2.0. We’ve been working on this for more than
six months and it’s great finally to be able to share it with a larger audience. Enjoy!
10
0
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • Android应用开发环境搭建(一年前整理)

    在windows下利用eclipse搭建android应用开发环境,仅做备忘

  • GoogleAuthenticator(或身份宝)

    目前的客户端App: Google Authenticator 安卓:https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2 iOS:https://itunes.apple.com/cn/app/google-authenticator/id388497605 阿里的《身份宝...

  • 纯干货!互联网人必备的6大专业搜索工具!

    互联网人冲浪必备的6大搜索工具,值得拥有。

  • 探秘E-HentaiCrawler:一款高效漫画爬虫工具

    探秘E-HentaiCrawler:一款高效漫画爬虫工具 项目地址:https://gitcode.com/shuiqukeyou/E-HentaiCrawler E-HentaiCrawler 是一个开源的Python项目,专门用于自动化抓取E-Hentai网站上的漫画资源信息。该项目的目的是为用户提供一种便捷的方式来获取、管理和存储他们喜欢的在线漫画,特别适合那些对编程有一定基础并对网络爬虫感...

  • verilog中的 <= #1 是什么意思?

    这里的 #1 只在仿真时有用,在综合时会被忽略掉 具体请看:https://stackoverflow.com/questions/22196468/what-does-1-mean-in-verilog

  • 网站如何经过身份验证_两步验证杀手锏:Java 接入 Google 身份验证器实战

    两步验证大家应该对两步验证都熟悉吧?如苹果有自带的两步验证策略,防止用户账号密码被盗而锁定手机进行敲诈,这种例子屡见不鲜,所以苹果都建议大家开启两步验证的。Google 的身份验证器一般也是用于登录进行两步验证,和苹果的两步验证是同样的道理。只不过 Google 的身份验证器用得更多更广泛,如 GitHub 的两步验证都是基于 Google 身份验证器。Google Authenticator 简...

  • Android 开发环境搭建

    安卓(Android)是一种基于Linux内核(不包含GNU组件)的自由及开放源代码的操作系统。主要使用于移动设备,如智能手机和平板电脑,由美国Google公司和开放手机联盟领导及开发。Android操作系统最初由Andy Rubin开发,主要支持手机。

  • Win11 如何查看文件夹被哪个进程占用

    Win11 如何查看文件夹被哪个进程占用

  • Verilog中#的使用与理解

    我在verilog中test_bench中遇到这样的问题,记录一下。 timescale 1ns / 1ps 基本知识:1ns=1000ps 含义为:时延单位为1ns,时延精度为1ps。 简而言之,前面是总时间,后面是每个单元的时间间隔。 #的使用 #是延时的意思,跟timescale中的时延单位有关。 `timescale 1ns / 1ps module top_add5_tb( ); reg a=0; reg b=0; wire c; top_add5 top

  • python将输出结果写入txt_《python输出到文件教程》 python 输出文件到txt

    如何通过python3写入txt文件使用open方法打开一个txt文件柄保存在f中。注意第二数w,表明是可写模式有这种模式可以写入文字。第一个参数大家都知道,就是文件路径,如果文件不存在,那么会自动创建一个该目录下的txt文件。写入文字,用write如果你一次有多行要写入,你可以用一个列表作为参数:如果写入完毕,我们需要关闭文件,用到的close方法。最后看一下,已经写入到tt记事本了。open(...

  • python如何输出文件_Python如何输出为文件

    Python如何输出为文件python输出为文件使用with open() as语句。使用示例:withopen('E:pythonpythonest.txt','w')asf:f.write('Hello,python!')1、传入标识符'w'或者'wb'表示写文本文件或写二进制文件;2、要写入特定编码的文本文件,请给open()函数传入encoding参数,将字符串自动转换成指定编码...

  • 多线程面试题(2020)

    多线程 1.并行和并发有什么区别? 并行:多个任务在同一个 CPU 核上,按细分的时间片轮流(交替)执行,从逻辑 上来看那些任务是同时执行。 并发:多个处理器或多核处理器同时处理多个任务。 如下图: 并发和并行 并发 = 两个队列和一台咖啡机。 并行 = 两个队列和两台咖啡机。 2.线程和进程的区别? 一个程序下至少有一个进程,一个进程下至少有一个线程,一个进程下也可以有 多个线程来增加程序的执行...

  • 手把手教你搭建Android开发环境

    搭建开发环境,是学习一门技术的开始。 参照网上的教程,整理了一下。 进行Android开发应用开发时,首先需要有JDK和Android SDK 的支持,还需要开发工具。在Andriod Studio 2.2开始,安装Android Studio 时,会自动安装JDK和Android SDK。 下载网址:https://developer.android.google.cn/studio/ 一、进入网址,点击下载安卓工作室(原英文版,翻译后的界面了)二、点击下载后,出现协议界面,勾选同意,下载。 三、双击刚

  • 常用开发工具----搜索工具

    1、Everything 文件搜索工具 可以实时感知文件变化, 实现各种模糊查询, 可以按修改时间排序. 常用搜索 “E:\百度云文件夹” Action.java 查找指定目录下的指定规则的文件。 2、Search and Replace 可以搜索和替换文档内容的搜索工具, 可以搜索文本文档, jar包等的内容, 安装后可以集成在鼠标右键中, 在选中的文件夹点右键就可以搜索这

  • arduino控制步进电机

    #include&amp;lt;Stepper.h&amp;gt; const int stepsPerRevolution = 512;//电机每一转步数(每转走多少步) // 初始化步进电机要使用的Arduino的引脚编号 Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11); void setup() { // 设置转速,单位r/min...

  • raw_input和input的区别

    这两个均是 python 的内置函数,通过读取控制台的输入与用户实现交互。但他们的功能不尽相同。下面对它们逐一介绍: 1、raw_input函数 语法:raw_input([prompt]) 如果prompt不存在,也就是raw_input(),它会标准输出(没有后面的换行符)。然后这个函数从输入读取一行,把它转化为字符串(移除尾部的换行符),并输出它。在这里移除尾部的换行符,也就是说,

  • 六款超好用的大数据分析工具

    一、大数据分析工具——Hadoop Hadoop是一个能够对大量数据进行分布式处理的软件框架。但是Hadoop是以一种可靠、高效、可伸缩的方式进行处理的。Hadoop是可靠的,因为它假设计算元素和存储会失败,因此它维护多个工作数据副本,确保能够针对失败的节点重新分布处理。Hadoop是高效的,因为它以并行的方式工作,通过并行处理加快处理速度。Hadoop还是可伸缩的,能够处理PB级数据。此外,Hadoop依赖于社区服务器,因此它的成本比较低,任何人都可以使用。 二、大数据分析工具——思迈特软件Smartb

  • 【软件】搜索工具

    链接:https://pan.baidu.com/s/1pRX1WJKIYi8Hz3v7PuL2RQ 提取码:504p

  • Python3将数据保存为txt文件

    f = open(&quot;data/model_Weight.txt&quot;,'a')    #若文件不存在,系统自动创建。'a'表示可连续写入到文件,保留原内容,在原                                             #内容之后写入。可修改该模式('w+','w','wb'等)   f.write(&quot;hello,sha&quot;)   #将字符串写入文件中 f.write...

Global site tag (gtag.js) - Google Analytics